home *** CD-ROM | disk | FTP | other *** search
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- NNAAMMEE
- dbopen - database access methods
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssyyss//ttyyppeess..hh>>
- ##iinncclluuddee <<lliimmiittss..hh>>
- ##iinncclluuddee <<ddbb..hh>>
-
- DDBB **
- ddbbooppeenn((ccoonnsstt cchhaarr **ffiillee,, iinntt ffllaaggss,, iinntt mmooddee,, DDBBTTYYPPEE ttyyppee,,
- ccoonnsstt vvooiidd **ooppeenniinnffoo));;
-
- DDEESSCCRRIIPPTTIIOONN
- _D_b_o_p_e_n is the library interface to database files. The
- supported file formats are btree, hashed and UNIX file
- oriented. The btree format is a representation of a
- sorted, balanced tree structure. The hashed format is an
- extensible, dynamic hashing scheme. The flat-file format
- is a byte stream file with fixed or variable length
- records. The formats and file format specific information
- are described in detail in their respective manual pages
- _b_t_r_e_e(3), _h_a_s_h(3) and _r_e_c_n_o(3).
-
- Dbopen opens _f_i_l_e for reading and/or writing. Files never
- intended to be preserved on disk may be created by setting
- the file parameter to NULL.
-
- The _f_l_a_g_s and _m_o_d_e _a_r_g_u_m_e_n_t_s are as specified to the
- _o_p_e_n(2) routine, however, only the O_CREAT, O_EXCL,
- O_EXLOCK, O_NONBLOCK, O_RDONLY, O_RDWR, O_SHLOCK and
- O_TRUNC flags are meaningful. (Note, opening a database
- file O_WRONLY is not possible.)
-
- The _t_y_p_e argument is of type DBTYPE (as defined in the
- <db.h> include file) and may be set to DB_BTREE, DB_HASH
- or DB_RECNO.
-
- The _o_p_e_n_i_n_f_o argument is a pointer to an access method
- specific structure described in the access method's manual
- page. If _o_p_e_n_i_n_f_o is NULL, each access method will use
- defaults appropriate for the system and the access method.
-
- _D_b_o_p_e_n returns a pointer to a DB structure on success and
- NULL on error. The DB structure is defined in the <db.h>
- include file, and contains at least the following fields:
-
- typedef struct {
- DBTYPE type;
- int (*close)(const DB *db);
- int (*del)(const DB *db, const DBT *key, u_int flags);
- int (*fd)(const DB *db);
- int (*get)(const DB *db, DBT *key, DBT *data, u_int flags);
- int (*put)(const DB *db, DBT *key, const DBT *data,
- u_int flags);
-
-
-
- January 2, 1994 1
-
-
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- int (*sync)(const DB *db, u_int flags);
- int (*seq)(const DB *db, DBT *key, DBT *data, u_int flags);
- } DB;
-
- These elements describe a database type and a set of func-
- tions performing various actions. These functions take a
- pointer to a structure as returned by _d_b_o_p_e_n, and some-
- times one or more pointers to key/data structures and a
- flag value.
-
- type The type of the underlying access method (and file
- format).
-
- close A pointer to a routine to flush any cached informa-
- tion to disk, free any allocated resources, and
- close the underlying file(s). Since key/data pairs
- may be cached in memory, failing to sync the file
- with a _c_l_o_s_e or _s_y_n_c function may result in incon-
- sistent or lost information. _C_l_o_s_e routines return
- -1 on error (setting _e_r_r_n_o) and 0 on success.
-
- del A pointer to a routine to remove key/data pairs
- from the database.
-
- The parameter _f_l_a_g may be set to the following
- value:
-
- R_CURSOR
- Delete the record referenced by the cursor.
- The cursor must have previously been ini-
- tialized.
-
- _D_e_l_e_t_e routines return -1 on error (setting _e_r_r_n_o),
- 0 on success, and 1 if the specified _k_e_y was not in
- the file.
-
- fd A pointer to a routine which returns a file
- descriptor representative of the underlying
- database. A file descriptor referencing the same
- file will be returned to all processes which call
- _d_b_o_p_e_n with the same _f_i_l_e name. This file descrip-
- tor may be safely used as an argument to the
- _f_c_n_t_l(2) and _f_l_o_c_k(2) locking functions. The file
- descriptor is not necessarily associated with any
- of the underlying files used by the access method.
- No file descriptor is available for in memory
- databases. _F_d routines return -1 on error (setting
- _e_r_r_n_o), and the file descriptor on success.
-
- get A pointer to a routine which is the interface for
- keyed retrieval from the database. The address and
- length of the data associated with the specified
- _k_e_y are returned in the structure referenced by
- _d_a_t_a. _G_e_t routines return -1 on error (setting
-
-
-
- January 2, 1994 2
-
-
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- _e_r_r_n_o), 0 on success, and 1 if the _k_e_y was not in
- the file.
-
- put A pointer to a routine to store key/data pairs in
- the database.
-
- The parameter _f_l_a_g may be set to one of the follow-
- ing values:
-
- R_CURSOR
- Replace the key/data pair referenced by the
- cursor. The cursor must have previously
- been initialized.
-
- R_IAFTER
- Append the data immediately after the data
- referenced by _k_e_y, creating a new key/data
- pair. The record number of the appended
- key/data pair is returned in the _k_e_y struc-
- ture. (Applicable only to the DB_RECNO
- access method.)
-
- R_IBEFORE
- Insert the data immediately before the data
- referenced by _k_e_y, creating a new key/data
- pair. The record number of the inserted
- key/data pair is returned in the _k_e_y struc-
- ture. (Applicable only to the DB_RECNO
- access method.)
-
- R_NOOVERWRITE
- Enter the new key/data pair only if the key
- does not previously exist.
-
- R_SETCURSOR
- Store the key/data pair, setting or initial-
- izing the position of the cursor to refer-
- ence it. (Applicable only to the DB_BTREE
- and DB_RECNO access methods.)
-
- R_SETCURSOR is available only for the DB_BTREE and
- DB_RECNO access methods because it implies that the
- keys have an inherent order which does not change.
-
- R_IAFTER and R_IBEFORE are available only for the
- DB_RECNO access method because they each imply that
- the access method is able to create new keys. This
- is only true if the keys are ordered and indepen-
- dent, record numbers for example.
-
- The default behavior of the _p_u_t routines is to
- enter the new key/data pair, replacing any previ-
- ously existing key.
-
-
-
-
- January 2, 1994 3
-
-
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- _P_u_t routines return -1 on error (setting _e_r_r_n_o), 0
- on success, and 1 if the R_NOOVERWRITE _f_l_a_g was set
- and the key already exists in the file.
-
- seq A pointer to a routine which is the interface for
- sequential retrieval from the database. The
- address and length of the key are returned in the
- structure referenced by _k_e_y, and the address and
- length of the data are returned in the structure
- referenced by _d_a_t_a.
-
- Sequential key/data pair retrieval may begin at any
- time, and the position of the ``cursor'' is not
- affected by calls to the _d_e_l, _g_e_t, _p_u_t, or _s_y_n_c
- routines. Modifications to the database during a
- sequential scan will be reflected in the scan, i.e.
- records inserted behind the cursor will not be
- returned while records inserted in front of the
- cursor will be returned.
-
- The flag value mmuusstt be set to one of the following
- values:
-
- R_CURSOR
- The data associated with the specified key
- is returned. This differs from the _g_e_t rou-
- tines in that it sets or initializes the
- cursor to the location of the key as well.
- (Note, for the DB_BTREE access method, the
- returned key is not necessarily an exact
- match for the specified key. The returned
- key is the smallest key greater than or
- equal to the specified key, permitting par-
- tial key matches and range searches.)
-
- R_FIRST
- The first key/data pair of the database is
- returned, and the cursor is set or initial-
- ized to reference it.
-
- R_LAST The last key/data pair of the database is
- returned, and the cursor is set or initial-
- ized to reference it. (Applicable only to
- the DB_BTREE and DB_RECNO access methods.)
-
- R_NEXT Retrieve the key/data pair immediately after
- the cursor. If the cursor is not yet set,
- this is the same as the R_FIRST flag.
-
- R_PREV Retrieve the key/data pair immediately
- before the cursor. If the cursor is not yet
- set, this is the same as the R_LAST flag.
- (Applicable only to the DB_BTREE and
- DB_RECNO access methods.)
-
-
-
- January 2, 1994 4
-
-
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- R_LAST and R_PREV are available only for the
- DB_BTREE and DB_RECNO access methods because they
- each imply that the keys have an inherent order
- which does not change.
-
- _S_e_q routines return -1 on error (setting _e_r_r_n_o), 0
- on success and 1 if there are no key/data pairs
- less than or greater than the specified or current
- key. If the DB_RECNO access method is being used,
- and if the database file is a character special
- file and no complete key/data pairs are currently
- available, the _s_e_q routines return 2.
-
- sync A pointer to a routine to flush any cached informa-
- tion to disk. If the database is in memory only,
- the _s_y_n_c routine has no effect and will always suc-
- ceed.
-
- The flag value may be set to the following value:
-
- R_RECNOSYNC
- If the DB_RECNO access method is being used,
- this flag causes the sync routine to apply
- to the btree file which underlies the recno
- file, not the recno file itself. (See the
- _b_f_n_a_m_e field of the _r_e_c_n_o(3) manual page for
- more information.)
-
- _S_y_n_c routines return -1 on error (setting _e_r_r_n_o)
- and 0 on success.
-
- KKEEYY//DDAATTAA PPAAIIRRSS
- Access to all file types is based on key/data pairs. Both
- keys and data are represented by the following data struc-
- ture:
-
- typedef struct {
- void *data;
- size_t size;
- } DBT;
-
- The elements of the DBT structure are defined as follows:
-
- data A pointer to a byte string.
-
- size The length of the byte string.
-
- Key and data byte strings may reference strings of essen-
- tially unlimited length although any two of them must fit
- into available memory at the same time. It should be
- noted that the access methods provide no guarantees about
- byte string alignment.
-
-
-
-
-
- January 2, 1994 5
-
-
-
-
-
- DBOPEN(3) DBOPEN(3)
-
-
- EERRRROORRSS
- The _d_b_o_p_e_n routine may fail and set _e_r_r_n_o for any of the
- errors specified for the library routines _o_p_e_n(2) and _m_a_l_-
- _l_o_c(3) or the following:
-
- [EFTYPE]
- A file is incorrectly formatted.
-
- [EINVAL]
- A parameter has been specified (hash function, pad
- byte etc.) that is incompatible with the current
- file specification or which is not meaningful for
- the function (for example, use of the cursor with-
- out prior initialization) or there is a mismatch
- between the version number of file and the soft-
- ware.
-
- The _c_l_o_s_e routines may fail and set _e_r_r_n_o for any of the
- errors specified for the library routines _c_l_o_s_e(2),
- _r_e_a_d(2), _w_r_i_t_e(2), _f_r_e_e(3), or _f_s_y_n_c(2).
-
- The _d_e_l, _g_e_t, _p_u_t and _s_e_q routines may fail and set _e_r_r_n_o
- for any of the errors specified for the library routines
- _r_e_a_d(2), _w_r_i_t_e(2), _f_r_e_e(3) or _m_a_l_l_o_c(3).
-
- The _f_d routines will fail and set _e_r_r_n_o to ENOENT for in
- memory databases.
-
- The _s_y_n_c routines may fail and set _e_r_r_n_o for any of the
- errors specified for the library routine _f_s_y_n_c(2).
-
- SSEEEE AALLSSOO
- _b_t_r_e_e(3), _h_a_s_h(3), _m_p_o_o_l(3), _r_e_c_n_o(3)
-
- _L_I_B_T_P_: _P_o_r_t_a_b_l_e_, _M_o_d_u_l_a_r _T_r_a_n_s_a_c_t_i_o_n_s _f_o_r _U_N_I_X, Margo
- Seltzer, Michael Olson, USENIX proceedings, Winter 1992.
-
- BBUUGGSS
- The typedef DBT is a mnemonic for ``data base thang'', and
- was used because noone could think of a reasonable name
- that wasn't already used.
-
- The file descriptor interface is a kluge and will be
- deleted in a future version of the interface.
-
- None of the access methods provide any form of concurrent
- access, locking, or transactions.
-
-
-
-
-
-
-
-
-
-
- January 2, 1994 6
-
-
-